package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.WeiBo;
import cn.tedu._04mybatis.pojo.vo.ContentCreatedVO;
import cn.tedu._04mybatis.pojo.vo.ResultMapVO1;
import cn.tedu._04mybatis.pojo.vo.ResultMapVO2;
import cn.tedu._04mybatis.pojo.vo.ResultMapVO3;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiBoMapper {
    /**
     * 插入微博数据
     * 返回值为int受影响行数
     * @param weiBo
     * @return
     */
    //@Insert("insert into weibo(content,created,user_id)values (#{content},#{created},#{userId})")
    abstract int insertWeiBo(WeiBo weiBo);

    /**
     * 删除微博数据
     * 返回值int为受影响行数
     * @param wid
     * @return
     */
    //@Delete("delete from weibo where id=#{wid}")
    abstract int deleteWeiBoById(Long wid);

    /**
     * 修改微博数据
     * 返回值int为受影响行数
     * @param weiBo
     * @return
     */
    //@Update("update weibo set content=#{content},created=#{created},user_id=#{userId} where id=#{id}")
    abstract int updateWeiBoById(WeiBo weiBo);


    /**
     * 查询所有微博数据
     * 多条数据全字段查询
     * 在JDBC里返回值ResultSet为查询结果集，这里返回的是List集合
     * @return
     */
    //@Select("select id,content,created,user_id as userId from weibo")
    abstract List<WeiBo> selectWeiBoAll();

    /**
     * 根据id查询微博数据
     * 单条数据全字段查询
     * @param wid
     * @return
     */
    //@Select("select id,content,created,user_id as userId from weibo where id=#{wid}")
    abstract WeiBo selectWeiBoById(Long wid);

    /**
     * 根据id查询微博部分数据
     * @return
     */
    //@Select("select content,created from weibo where id=#{wid}")
    abstract List<ContentCreatedVO> selectWeiBoContentCreatedById(Long wid);

    /**
     * 根据微博id动态的修改数据
     * @param weiBo
     * @return
     */
    abstract int dynamicUpdaterWeibo(WeiBo weiBo);

    /**
     * 根据id，Array数组动态删除weibo数据
     * @param wid
     * @return
     */
    abstract int deleteById1(Long[] wid);

    /**
     * 根据id，List集合动态删除weibo数据
     * @param list
     * @return
     */
    abstract int deleteById2(List<Long> list);

    /**
     * 查询weibo表中的表记录条数
     * @param
     * @return
     */
    abstract int selectWeiboCount();

    /**
     * 查询comment表中的部分数据
     */
    abstract ResultMapVO1 selectWeiboVO1ById1(Long wid);


    /**
     * ResultMap多表:根据微博ID查询该条微博的 ID、微博内容、用户ID、用户昵称
     */
    abstract ResultMapVO2 selectWeiboVO2ById2(Long wid);

    /**
     * ResultMap多表: 获取所有微博的评论信息
     */
    abstract ResultMapVO3 selectWeiboVO3ById3(Long wid);

}
